<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // Object.defineProperty(对象,属性,{配置项})
        //Object.defineProperties(对象,{})
        //Object.defineProperties(对象,{
        //  属性1:{配置项},
        //  属性2:{配置项},
        //  属性3:{配置项},

        // })
        const p1 = {
            name: '张三',
            age: 18,
        }
         // 只能劫持存在的key  不存在的key 无法劫持 
         // 不支持动态的添加属性  
         // 不支持劫持到动态添加的属性 
        console.log('原始数据',p1);


        for(let k in p1){
            Object.defineProperties(p1,{
                // 把属性复制一份出来  原来是name 
                // 现在是_name
                ['_'+k]:{
                    value:p1[k],
                    enumerable:false,
                    writable:true,
                },
                //开始劫持
                [k]:{
                    get(){
                        return this['_'+k];
                    },
                    set(val){
                        this['_'+k] = val;
                        console.log(`你尝试修改${k} 修改成${val}`)
                    }
                }
             
            })
        }
        console.log('劫持后的数据',p1);

        p1.name = '李四';
        console.log('劫持后的数据',p1);

        p1.geder = '男';
        console.log('劫持后的数据',p1);
    </script>
</body>
</html>